package com.candy.dao;

import com.candy.jdbcutil.JDBCUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;

import java.sql.SQLException;

/**
 * 操作数据库中的表 表users
 * 两个方法，实现了用户的注册和登录
 *
 */
public class UsersDao {
    //创建QueryRunner类的对象，构造方法中，传递工具类红获取的数据源
    private QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
    /**
     * 穿件注册功能，接收用户的输入用户名和密码
     * 返回注册结果，true 注册成功 false 注册失败，用户名被占用
     * 实现思想：
     *      检查用户名是否被占用
     *      将用户输入的用户名，作为数据表的查询条件
     *      如果有结果集，说明用户名已经有了，返回false
     *
     *      如果没有结果集，用户名可用使用
     *      用户名和密码insert 写入到数据表，返回true
     */
    public boolean register(String username,String password){
        try {
            //拼写SQl语句，检查用户是否被占用，用户名作为条件查询
            String sql = "select uname from users where uname=?";
            //调用qr对象方法query查询结果集,ScalarHandler 一个结果集
            String user = qr.query(sql, new ScalarHandler<String>(), username);
            //如果用户名存在，user变量，表示一个用户名，用户名不存在，user变量结果null
            if (user != null)
                return false;
            //用户名可用使用
            //拼写添加用户名密码的SQL语句
            sql = "insert into users(uname,password) values(?,?)";
            //创建对象数组，保存？占位符的世纪参数
            Object[] params = {username, password};
            //调用qr对象方法update写入数据
            qr.update(sql, params);
            return true;
        }catch (SQLException ex){
            System.out.println(ex);
            throw  new RuntimeException("注册失败");
        }
    }

    /**
     * 创建登录功能，接收用户输入的用户名和密码
     * 返回登录的结果，true 登录成功 false 登录失败
     * 实现思想：
     *  用户名和密码，作为数据表users的查询条件，查询结果集
     *  有结果集，返回true
     *  没有结果集，返回false
     */
    public boolean login(String username,String password){
        try {
            //拼写查询数据标的SQL
            String sql = "select * from users where uname=? and password=?";
            Object[] params = {username, password};
            //调用qr方法query查询数据表
            Object[] result = qr.query(sql, new ArrayHandler(), params);
            //对数组进行判断，没有结果集
            if (result.length == 0) {
                return false;
                //if判断为假，有结果集
            }
            return true;
        }catch (SQLException ex){
            ex.printStackTrace();
            throw  new RuntimeException("登录查询失败");

        }
    }
}
